#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>

typedef int HeapDataType;

typedef struct Heap
{
	HeapDataType* a;
	int capacity;
	int size;
}HP;


void HPInit(HP* php);
void HPDestroy(HP* php);


void HPPush(HP* php,HeapDataType x);

void HPPop(HP* php);
bool HPEmpty(HP* php);
HeapDataType HPTop(HP* php);
void Swap(HeapDataType* p1, HeapDataType* p2);
void AdjustUp(HeapDataType* a,int child);
void AdjustDown(HeapDataType* a,int parent,int size);
int HPSize(HP* php);
void PrintTopK(HP* php,int k);